home *** CD-ROM | disk | FTP | other *** search
- Idnt _Open
- Section _Fopen,Code
- Xref Dosbase
- Xref IoResult
- Xref IoCheck
- Xref Error
- Xdef FOpen
- Xdef FileTab
-
- ; --------------------------------
- ; - FOpen : Ein File mit Namen und Modus öffnen
- ; -
- ; - Stand : 07-Aug-93
- ; -
- ; - RTS.l String(256) 0.w [Adresse Filevar]
- ; - D2 = Modus
- ; -
- ; - Die Null steht da, um 255-Byte lange Strings mit einem 0
- ; - beenden zu können.
-
- FOpen move.l (a7)+,a4 ; Rts - Adresse abheben
- Clr.l IoResult ; Ergebnis = Ok
- Moveq #0,d4 ; Zähler
- move.b (a7),d4 ; Länge des Strings
- addq.l #1,d4 ; +1 (Längenbyte am Anfang )
- clr.b (a7,d4) ; Nullbyte ans Ende des Strings setzen
- lea 1(a7),a1
- move.l a1,d1 ; Adresse String auf Stack
- move.l Dosbase,a6
- jsr -30(a6)
- adda.l #258,a7 ; 256 Byte String + 2 Byte (0.w)
- Move.l (sp)+,a0 ; Adresse Filevar
- Move.l d0,(a0) ; Ergebnis in die Var
- tst.l d0 ; D0 = 0 --> Fehler beim Öffnen
- beq.s FOfehler ; Fehler !
-
- ; ---------------------------
- ; In die Tabelle eintragen
-
- Moveq #0,d2 ; Zähler max. Felder (Index)
- Lea FileTab,A1 ; Adresse 1. Feld
- Tstl Tst.l (a1,d2) ; Teste ob Filehandle Platz hat
- beq.s Save ; Platz frei, speichern
- addq.l #4,d2 ; nächstes Feld
- Cmp.w #128,d2 ; Tabelle durchsucht ?
- Beq.s FTErr ; Ja, Kein Platz mehr
- bra.s Tstl
- Save Move.l d0,(a1,d2)
-
- clr.l IoResult ; Kein Fehler, IOResult=0
- FOrts jmp (a4)
-
- ; Nun ist ein Fehler aufgetreten , also
- ; Fehlernummer ermitteln und abspeichern
- FOfehler
- Jsr -132(a6) ; IOErr
- move.l d0,IoResult
- tst.l IoCheck ; IO-Behandlung im Compiler ?
- beq FOrts ; Ja
- Move.l a4,-(sp) ; Nein, Adresse des Fehlers ablegen
- Jmp Error
-
- ; Fehler: Tabelle ist voll
- FTErr Moveq #4,d0
- Move.l a4,-(sp)
- Jmp Error
- ; ---------------------------
- ; Tabelle für max. 30 Filedescriptoren
- ; Tabellenfeld = 0 --> noch leer
-
- FileTab dc.l 0,0,0,0,0,0
- dc.l 0,0,0,0,0,0
- dc.l 0,0,0,0,0,0
- dc.l 0,0,0,0,0,0
- dc.l 0,0,0,0,0,0
- dc.l 0,0 ; Abbruch forcieren
-
-
-
-
-
- End
-
-
-